home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
C/C++ Users Group Library 1996 July
/
C-C++ Users Group Library July 1996.iso
/
listings
/
v_09_10
/
9n10026a
< prev
next >
Wrap
Text File
|
1991-08-12
|
2KB
|
56 lines
/* --------------------------------------------------------------
FUNCTION LOOKUP:
A. Define the table of valid commands, in lowercase. Corresponding
to each command there is a pointer to the function to be called
to implement that command. Note that the commands are in
alphabetical order.
B. Search the command table looking for the supplied string. If there
is an exact match return the corresponding function's address. If
the next entry is greater than the one we are looking for it must
not exist since the table is sorted in alpha order by command.
Therefore, we return the address of an error handling function.
C. If we search the entire table and don't find a match we also
return the error function's address.
-------------------------------------------------------------- */
void (*lookup(const char *pcmd))(void)
{
/*A*/ static const struct {
char *pcommand;
void (*pcmd_fun)(void);
} cmd_table[] = {
{"add node", add_node},
{"count nodes", count_nodes},
{"display node", display_node},
{"dump ascending", dump_asc_nodes},
{"dump descending", dump_des_nodes},
{"exit", myexit},
{"help", help},
{"remove node", remove_node},
};
void bad_cmd(void);
int i;
int comp;
/*B*/ for (i = 0; i < NUMELEM(cmd_table); ++i) {
comp = strncmp(pcmd, cmd_table[i].pcommand, strlen(pcmd));
if (comp == 0) {
return cmd_table[i].pcmd_fun;
}
else if (comp < 1) {
return &bad_cmd;
}
}
/*C*/ return &bad_cmd;
}